/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package datos;

import java.io.*;
import java.util.*;
import org.jdom.*;
import org.jdom.input.*;
import org.jdom.output.*;

/**
 *
 * @author Daniela
 */
public class Archivo {

    private static String rutaArchivo = "src\\datos\\DatosUsuarios.xml";

  //  private static String rutaArchivoSal = "src\\datos\\DatosUsuariosSal.xml";

     public static void leerArchivoXML(ListaUsuario listaDeUsuarios)
    {
        try
        {
            SAXBuilder builder = new SAXBuilder();

            /* Se crea un documento nuevo con el nombre del archivo */
            Document doc = builder.build(rutaArchivo);

            /* Se obtiene la raíz del archivo (la etiqueta inicial) */
            Element raiz = doc.getRootElement();

            /* Se puede obtener el atributo de la raíz (de la etiqueta) */
            System.out.println(raiz.getAttributeValue("tipo"));

            /* Se obtienen todos los hijos cuya etiqueta esa "usuario"  */
            /* y se asignan esos hijos a un List                        */
            List listaUsuarios = raiz.getChildren("usuario");

            System.out.println("Formada por:" + listaUsuarios.size() + " usuarios");
            System.out.println("------------------");

             /* Se genera un iterador para recorrer el List que se generó */
            Iterator i = listaUsuarios.iterator();

            /* Se recorre el List */
            while (i.hasNext())
            {
                /* Se obtiene cada uno y se asigna a un objeto de tipo Element */
                Element e = (Element) i.next();


                Element nombre = e.getChild("nombre");
                Element apellido = e.getChild("apellido");
                Element nickname = e.getChild("nickname");
                Element clave = e.getChild("clave");
                Element dia = e.getChild("dia");
                Element mes = e.getChild("mes");
                Element año = e.getChild("año");
                int diaI,mesI,añoI;
                String diaS,mesS,añoS;
                diaS = mesS = añoS = "";

                diaS = dia.getText();
                mesS = mes.getText();
                añoS = año.getText();

                diaI = Integer.parseInt(diaS);
                mesI = Integer.parseInt(mesS);
                añoI = Integer.parseInt(añoS);

                /* Se crea un nodo nuevo con la información y se agrega a la lista de usuarios */
                Usuario elNodo = new Usuario(nombre.getText(),apellido.getText(),nickname.getText(),clave.getText(),diaI,mesI,añoI);
                listaDeUsuarios.agregarElemento(elNodo);
            }
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }


     public static void guardarArchivoXML(ListaUsuario listaDeUsuarios)
     {
        Usuario nodoAuxiliar;

        /* Se crea una raiz de la estructura */
        Element root = new Element("usuarios");

        /* Es posible agregar atributos a la estructura inicial */
        root.setAttribute("tipo","lista de usuarios");

        Iterator iterador = listaDeUsuarios.getIterator();

        while (iterador.hasNext())
        {
            /* Se crea la etiqueta "usuario" */
            Element usuarios = new Element("usuario");

            nodoAuxiliar = (Usuario) iterador.next();

            /* Se crean las etiquetas nombre, apellido y cargo */
            Element nombre = new Element("nombre");
            Element apellido = new Element("apellido");
            Element nickname = new Element("nickname");
            Element clave = new Element("clave");
            Element dia = new Element("dia");
            Element mes  = new Element("mes");
            Element año = new Element("año");

            String diaS,mesS,añoS;
            diaS = mesS = añoS = "";
            diaS = String.valueOf(nodoAuxiliar.getDia());
            mesS = String.valueOf(nodoAuxiliar.getMes());
            añoS = String.valueOf(nodoAuxiliar.getAño());

            /* Se inicializa cada etiqueta con sus valores de la lista */
            nombre.setText(nodoAuxiliar.getNombre());
            apellido.setText(nodoAuxiliar.getApellido());
            nickname.setText(nodoAuxiliar.getNickname());
            clave.setText(nodoAuxiliar.getClave());
            dia.setText(diaS);
            mes.setText(mesS);
            año.setText(añoS);

            /* Se añaden las etiquetas a la etiqueta principal (usuario)    */
            /* estableciendo que un usuario tiene nombre, apellido y cargo  */
            usuarios.addContent(nombre);
            usuarios.addContent(apellido);
            usuarios.addContent(nickname);
            usuarios.addContent(clave);
            usuarios.addContent(dia);
            usuarios.addContent(mes);
            usuarios.addContent(año);
            /* Se añade el nuevo usuario a la estructura XML */
            root.addContent(usuarios);
         }

        /* Se crea un documento nuevo */
        Document doc = new Document(root);

        try
        {
            /* Se genera un flujo de salida de datos XML */
            XMLOutputter out = new XMLOutputter();

            /* Se asocia el flujo de salida con el archivo donde se guardaran los datos */
            FileOutputStream file = new FileOutputStream(rutaArchivo);

            /* Se manda el documento generado hacia el archivo XML */
            out.output(doc,file);

            /* Se limpia el buffer ocupado por el objeto file y se manda a cerrar el archivo */
            file.flush();
            file.close();

            /* En este caso se manda a imprimir el archivo por la consola   */
            /* ESTE PROCESO NO ES OBLIGATORIO PARA PROCESAR EL XML          */
            out.output(doc,System.out);
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }
     }
}
